home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Gekkan Dennou Club 147
/
Gekkan Dennou Club - 2000.8 Vol. 147 (Japan).7z
/
Gekkan Dennou Club - 2000.8 Vol. 147 (Japan) (Track 1).bin
/
fdimg
/
oh!.2hd
/
OH!DEN_B.LZH
/
TOOLS
/
CDC
/
CDCSXSRC.LZH
/
LBSRC.LZH
/
EVENTPROC.HAS
< prev
next >
Wrap
Text File
|
1995-03-20
|
9KB
|
401 lines
*
* イベント処理部
* 1995.03.10
* You Utzse@電脳魔術団@Mankaiseisakujo /1993-1995
*
.include DOSCALL.MAC *標準の奴(XC)
.include SXCALL.MAC *FSX Ver2.01用(シャープコンパチ)
.include SXCALL.H *開発キットヘッダ
.include YOU200.MAC *独自のマクロ定義ファイルです
.include HASMACRO.MAC *HAS2.5以降のマクロパッケージ
.include WORK.INC *ワークエリアの内容を定義するファイル
.include FLAG.INC *条件付アセンブル処理を定義するファイル
.include CDC.MAC
.xref ScrProc
.text
*------------------------------------------------------*
*●アイドルイベント処理関数●
.xref InitGraph
.xref DrawWin
.xref Timerproc
*------------------------------------------------------*
IDLEproc::
move.l #20,-(sp) *ベースタイム
pea.l CD_COUNTER(a5) *現在のカウンタアドレス
SXSUB Timerproc,8 *タイマー処理
ifmi <tst.l d0>
CDC _CDC_TRACKS *CDトラック情報を得る
move.l d0,a0
ifeq <tst.w (a0)> *CDない時
ifne <cmp.l #-1,Ttlargc(a5)>
move.l #-1,Ttlargc(a5)
SX __EMMSLoc,0
move.l d0,-(sp)
move.l TtlHdl(a5),-(sp)
* pea TtlHdl(a5) *疑似ハンドル
move.l Ttlargc(a5),-(sp)
pea.l Sc1work(a5)
move.w #1,-(sp)
SXSUB ScrProc,18
endif
else
ifeq <cmp.l #-1,Ttlargc(a5)> *CDが入った瞬間
move.l 6(a0),d0
subq.l #1,d0
move.l d0,Ttlargc(a5) *スクロールバー用曲数変更
.xref TtlHdlInit
jbsr TtlHdlInit *CDTITLE取り直し
jbsr DrawWin *描き直し
jbsr DrawWin2
endif
endif
endif
~T
rts
*------------------------------------------------------*
*●レフトダウン時の処理
*
*------------------------------------------------------*
MSLDproc::
tst.b winActive(a5) *現在ウィンドウはアクティブか?
bne MSLD1 *アクティブならMSLD1へ
move.w eventRec_ShiftBit(a5),d0 *シフトキービット取得
and.l #KS_OPT1,d0 *OPT.1キーチェック
bne MSLD1
Xpea winPtr(a5)
SX __WMSelect,4 *アクティブにして
SX __EMLStill,0 *マウス左は押されたまま?
tst.l d0
beq MSLD9 *離されてたら
move.l eventRec_whom2(a5),-(sp)
SX __WMFind,4 *レフトダウンが起きた場所が
cmp.l #W_INDRAG,d0
bne MSLD9 *ドラッグリージョンかどうか
MSLD1:
*エラーチェックずみのこと)
pea eventRec(a5)
Xpea winPtr(a5) *ウィンドウ処理
SX __SXCallWindM,8
ifeq <cmp.l #W_INCLOSE,d0> *クローズボックス?
rts
endif
cmp.w #W_INDESK,d0 *どこも操作されなかった?
beq MSLD9
cmp.w #W_ININSIDE,d0 *ウィンドウコンテンツ外ならなにもしない
bne MSLD9
bsr CtrlChk *コントロール処理へ分岐
MSLD9
~T
rts
*------------------------------------------------------*
*------------------------------------------------------*
CtrlChk:
movem.l d1-d2,-(sp)
Xpea winPtr(a5)
move.l now_mpt(a5),-(sp)
SX __CMFind,8 *コントロールの上にあるか?
move.l d0,d1 *d0=パートコード
move.l a0,d2 *d2=cHDLスクロールバーが複数なら
*これも使って分岐判定する
moveq #0,d0
ifge <cmpi.w #20,d1> *スクロールバーか
move.w d1,-(sp) *パートコード
move.l now_mpt(a5),-(sp) *ローカル座標
move.l TtlHdl(a5),-(sp) *文字列のハンドル
* pea.l TtlHdl(a5) *疑似ハンドル
move.l Ttlargc(a5),-(sp) *要素数-1
pea.l Sc1work(a5) *スクロールバー構造体のアドレス
move.w #2,-(sp)
SXSUB ScrProc,20
elseifeq <cmpi.w #C_INBTTN,d1>
move.l #0,-(sp) *pea 0.w
move.l now_mpt(a5),-(sp)
move.l d2,-(sp)
SX __CMCheck,12
ifeq <cmpi.w #C_INBTTN,d0>
ifeq <cmp.l b1Hdl(a5),d2>
bsr b1proc
elseifeq <cmp.l b2Hdl(a5),d2>
bsr b2proc
elseifeq <cmp.l b3Hdl(a5),d2>
bsr b3proc
elseifeq <cmp.l b5Hdl(a5),d2>
bsr b5proc
endif
endif
else
move.l now_mpt(a5),-(sp)
move.l Ttlargc(a5),-(sp)
pea.l Sc1work(a5)
move.w #5,-(sp)
SXSUB ScrProc,14
move.w d0,checkingttl(a5)
ifge <tst.w d0>
HDL2PTR PrgHdl(a5),a0
iflt <cmpi.w #100,(a0)> *100未満なら
addi.w #1,(a0) *登録曲数1増やして
move.w (a0),d0 *曲数取りだし
move.w d0,d1 *d1=表示領域チェック用
addq.w #1,d0 *offset変更
add.w d0,a0 *登録位置変更
moveq #0,d0
move.b checkingttl+1(a5),d0
addq.b #1,d0
move.b d0,(a0) *曲番号セット
.xref DrawWin2
ifgt <cmp.w #10,d1>
add.l #4,PrgstrPtr(a5)
endif
jbsr DrawWin2 *PRG番号描画
* moveq #0,d1
* move.b checkingttl+1(a5),d1
* addq.l #1,d1
* moveq #-1,d2
* CDC _CDC_PROGIN
endif
endif
endif
CC2_end:
movem.l (sp)+,d1-d2
rts
CC2_err:
movem.l (sp)+,d1-d2
~F
rts
*------------------------------------------------------*
b1proc: *選択中の曲をダイレクトに演奏
ifne <cmpi.w #-1,checkingttl(a5)>
moveq #1,d1
add.w checkingttl(a5),d1
moveq #-1,d2
CDC _CDC_PLAY
endif
~T
rts
b2proc:
CDC _CDC_PROG
move.l d0,a0
HDL2PTR PrgHdl(a5),a1
move.l #25-1,d0
@@:
move.l (a1)+,(a0)+
dbra d0,@b
move.w (a1),(a0)
CDC _CDC_PROG *プログラム送信
~T
rts
b3proc: *一曲取消
HDL2PTR PrgHdl(a5),a0
ifgt <tst.w (a0)>
move.w (a0),d0
addq.w #2,d0
sub.w #1,(a0)
add.w d0,a0
move.b #0,(a0)
HDL2PTR PrgHdl(a5),a1
moveq #0,d1
move.w (a1),d1
move.l d1,d0
sub.w #10,d1
ifge <cmp.w #10,d0>
sub.l #4,PrgstrPtr(a5)
move.l PrgstrPtr(a5),d0
lsr.w #2,d0
ifgt <cmp.w d1,d0>
add.l #4,PrgstrPtr(a5)
endif
else
move.l #0,PrgstrPtr(a5)
endif
jbsr DrawWin2
* CDC _CDC_PROGOUT
endif
~T
rts
b5proc:
move.l #0,PrgstrPtr(a5)
HDL2PTR PrgHdl(a5),a0
* move.w #0,(a0)
** *PRGメモリの消去
moveq.l #25-1,d1
moveq.l #0,d0
@@:
move.l d0,(a0)+
dbra d1,@b
move.w d0,(a0)
**
jbsr DrawWin2
* CDC _CDC_PROG
* move.l d0,a0
* move.w #0,(a0) *CDCのPRG消去
* CDC _CDC_PROG
~T
rts
*------------------------------------------------------*
*●ライトダウン時
*------------------------------------------------------*
MSRDproc::
rts
*------------------------------------------------------*
*●キー入力時
*------------------------------------------------------*
KEYDproc::
tst.b winActive(a5)
beq @f
jbsr InitGraph
move.w eventRec_whom1(a5),d0
ifeq <cmp.w #K_LEFT,d0> *カーソル左
HDL2PTR PrgHdl(a5),a1
move.w (a1),d0
ifge <cmp.w #10,d0>
ifmi <sub.l #4,PrgstrPtr(a5)>
move.l #0,PrgstrPtr(a5)
else
jbsr DrawWin2
endif
endif
elseifeq <cmp.w #K_RIGHT,d0> *カーソル右
HDL2PTR PrgHdl(a5),a1
moveq #0,d1
move.w (a1),d1
move.l d1,d0
sub.w #10,d1
ifge <cmp.w #10,d0>
add.l #4,PrgstrPtr(a5)
move.l PrgstrPtr(a5),d0
lsr.w #2,d0
ifgt <cmp.w d1,d0>
sub.l #4,PrgstrPtr(a5)
else
jbsr DrawWin2
endif
else
move.l #0,PrgstrPtr(a5)
endif
elseifeq <cmp.w #K_BS,d0> *カーソル右
bsr b3proc
else *それ以外
* pea eventRec(a5)
* move.w #EM_MSTOKEY,-(sp)
* SX __TSGetEvent,6
move.l eventRec_whom1(a5),-(sp)
pea Sc1work(a5)
move.w #4,-(sp) *キーでのスクロールをコントロール
SXSUB ScrProc,10
endif
* move.w #0,-(sp)
* move.w #%100000,-(sp) *キーダウンフラッシュ
* SX __EMClean,4
@@:
~T
rts
*------------------------------------------------------*
*●アップデート処理
*------------------------------------------------------*
.if WINCOUNT>=1
UPDTproc::
jbsr InitGraph
jbsr DrawWin
jbsr DrawWin2
~T
rts
.endif
*------------------------------------------------------*
*●アクティベート処理
*ウィンドウのアクティブフラグは立ててあるので
*特にやることはない
*------------------------------------------------------*
ACTproc::
rts
*------------------------------------------------------*
SYSproc::
ifeq <cmp.w #1025,d0>
~F *おしまい
rts
endif
~T
rts
*------------------------------------------------------*
*●変数などの初期化部
*リソースオープン処理部は消さないこと
LBName: dc.b 'CDCSX.LB',0
.even
*------------------------------------------------------*
Initproc::
.iff USE_RES=0
.xref MYResOpen
pea.l LBName(pc)
SXSUB MYResOpen,4
.endif
move.w #13,eventCom+tnWhat(a5)
SX __EMSysTime,0
move.l d0,eventCom+tnWhen(a5)
move.w #1024,eventCom+tnWhat2(a5)
move.w taskID(a5),eventCom+tnTaskID(a5)
pea.l eventCom(a5)
move.w ParID(a5),-(sp)
SX __TSSendMes,6
ifeq <cmp.l #2,d0>
move.l eventCom+tnWhom(a5),PrgHdl(a5)
endif
CDC _CDC_TRACKS
move.l d0,a0
move.l 2(a0),TRACKmax(a5) *トラック最大数
move.w #-1,checkingttl(a5)
~T
rts
*------------------------------------------------------*
*●INITprocで確保したメモリなどを廃棄
*------------------------------------------------------*
TINIproc::
~T
rts
.end